class Solution {
public:
    string trans(string s, int n) {
        vector<string> strs;
        string ret;

        getStr(s, strs);
        
        for(auto& str : strs)
        {
            for(int i = 0; i < str.size(); ++i)
            {
                if(isupper(str[i]))
                {
                    str[i] += 32;
                }
                else if(islower(str[i]))
                {
                    str[i] -= 32;
                }
            }
        }

        for(int i = strs.size()-1; i >= 0; --i)
        {
            ret += strs[i];
            if(i != 0)
                ret += " ";
        }

        return ret;
    }

    void getStr(string s, vector<string>& strs)
    {
        string t;
        for(int i = 0; i <= s.size(); ++i)
        {
            if(i < s.size() && s[i] != ' ')
            {
                t += s[i];
            }
            else if((i < s.size() && s[i] == ' ') || i == s.size())
            {
                if(!s.empty())
                {
                    strs.push_back(t);
                }
                t.clear();
            }
        }
    }
};


class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int minLen = getMinLen(strs);
        string ret = "";

        for(int j = 0; j < minLen; ++j)
        {
            bool flag = true;
            for(int i = 1; i < strs.size(); i++)
            {
                if(strs[i][j] != strs[i-1][j])
                {
                    flag = false;
                }   
            }

            if(flag)
            {
                ret += strs[0][j];
            }
        }

        return ret;
    }

    int getMinLen(vector<string>& strs)
    {
        int len = INT_MAX;
        if(strs.size() == 0)
        {
            len = 0;
        }
        if(strs.size() != 0)
        {
            for(auto& str : strs)
            {
                len = len < str.size() ? len : str.size();
            }
        }

        return len;
    }
};


class Solution {
public:
    string solve(string numstr1, string numstr2) {
        string ret;

        if(numstr1.empty() && !numstr2.empty())
        {
            return numstr2;
        }
        else if(numstr2.empty() && !numstr1.empty())
        {
            return numstr1;
        }
        else if(numstr1.empty() && numstr2.empty())
        {
            return "";
        }
        else 
        {
            int pre = 0;
            int num1 = 0;
            int num2 = 0;
            
            while(!numstr1.empty() && !numstr2.empty())
            {
                num1 = numstr1.back() - '0';
                num2 = numstr2.back() - '0';
                numstr1.pop_back();
                numstr2.pop_back();

                int sum = pre + num1 + num2;
                pre =  sum / 10;
                sum = sum % 10;

                ret += sum + '0';
            }

            while(!numstr1.empty())
            {
                num1 = numstr1.back() - '0';
                numstr1.pop_back();

                int sum = num1+pre;
                pre = sum / 10;
                sum = sum % 10;

                ret += sum + '0';
            }
            while(!numstr2.empty())
            {
                num2 = numstr2.back() - '0';
                numstr2.pop_back();

                int sum = num2+pre;
                pre = sum / 10;
                sum = sum % 10;

                ret += sum + '0';
            }

            if(pre != 0)
            {
                ret += (pre+'0');
            }
        }

        reverse(ret.begin(), ret.end());

        return ret;
    }
};
